package com.tongyi.lizhishop.activitys;

import android.app.Activity;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.RegeocodeQuery;
import com.amap.api.services.geocoder.RegeocodeResult;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tongyi.lizhishop.R;
import com.tongyi.lizhishop.common.BaseActivity;
import com.wuhenzhizao.titlebar.widget.CommonTitleBar;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MapActivity extends BaseActivity implements AMap.OnMyLocationChangeListener {

    @BindView(R.id.titlebar)
    CommonTitleBar titlebar;
    @BindView(R.id.map)
    MapView mMapView;
    @BindView(R.id.activity_map)
    LinearLayout activityMap;
    @BindView(R.id.leftTopTv)
    TextView leftTopTv;
    @BindView(R.id.leftbottomTv)
    TextView leftbottomTv;
    @BindView(R.id.righTopTv)
    TextView righTopTv;
    @BindView(R.id.bg_parent)
    RelativeLayout bgParent;
    private AMap aMap;
    private UiSettings mUiSettings;//定义一个UiSettings对象
    private static final String TAG = "MapActivity";
    private MarkerOptions markerOption;
    private LatLng resultLatlng;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        ButterKnife.bind(this);
        getSwipeBackLayout().setEnableGesture(false);
        initTitleBarView(titlebar, "定位");
        mMapView.onCreate(savedInstanceState);
        if (aMap == null) {
            aMap = mMapView.getMap();
            mUiSettings = aMap.getUiSettings();
        }
        initMap();
    }

    private void initMap() {
        MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点，定位点依照设备方向旋转，并且会跟随设备移动。（1秒1次定位）如果不设置myLocationType，默认也会执行此种模式。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔，只在连续定位模式下生效，单次定位模式下不会生效。单位为毫秒。
        aMap.getUiSettings().setMyLocationButtonEnabled(true);
        //设置默认定位按钮是否显示，非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点，false表示隐藏定位蓝点并不进行定位，默认是false
        //        aMap.setOnMyLocationChangeListener(this);
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次，且将视角移动到地图中心点。

        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style

//        mUiSettings.setCompassEnabled(true);// 显示指南针;
        mUiSettings.setZoomControlsEnabled(false);//隐藏缩放按钮
        mUiSettings.setAllGesturesEnabled(true);
        aMap.setOnMapClickListener(new AMap.OnMapClickListener() {
            @Override
            public void onMapClick(LatLng latLng) {
                resultLatlng = latLng;
                aMap.clear();
                markerOption.position(latLng);
                aMap.addMarker(markerOption);
                getDesc(latLng);
                bgParent.setVisibility(View.VISIBLE);
//                leftbottomTv.setText();
            }
        });


        markerOption = new MarkerOptions();
        markerOption.draggable(true);
        markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                .decodeResource(getResources(), R.mipmap.qidian)));

        AMap.OnMarkerDragListener markerDragListener = new AMap.OnMarkerDragListener() {

            // 当marker开始被拖动时回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDragStart(Marker arg0) {
                Log.e(TAG, "onMarkerDragStart() called with: arg0 = [" + arg0 + "]");

            }

            // 在marker拖动完成后回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDragEnd(Marker arg0) {
                Log.e(TAG, "onMarkerDragEnd() called with: arg0 = [" + arg0 + "]");
                arg0.getOptions().getPosition();
                resultLatlng = arg0.getPosition();
            }

            // 在marker拖动过程中回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDrag(Marker arg0) {
                Log.e(TAG, "onMarkerDrag() called with: arg0 = [" + arg0 + "]");
            }
        };
// 绑定marker拖拽事件
        aMap.setOnMarkerDragListener(markerDragListener);
    }

    private void getDesc(final LatLng latLng) {
        GeocodeSearch geocoderSearch = new GeocodeSearch(this);
        geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
            @Override
            public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
                if (i == 1000) {
                    leftTopTv.setText(((int) (latLng.latitude * 100)) / 100.0 + "," + ((int) (latLng.longitude * 100)) / 100.0);
                    leftbottomTv.setText(regeocodeResult.getRegeocodeAddress().getFormatAddress());
                } else {
                    ToastUtils.showShort("无法查询地址");
                }
            }

            @Override
            public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {

            }
        });
        // 第一个参数表示一个Latlng，第二参数表示范围多少米，第三个参数表示是火系坐标系还是GPS原生坐标系
        LatLonPoint latLonPoint = new LatLonPoint(latLng.latitude, latLng.longitude);
        RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP);

        geocoderSearch.getFromLocationAsyn(query);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy()，销毁地图
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume ()，重新绘制加载地图
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause ()，暂停地图的绘制
        mMapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState)，保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

    @Override
    public void onMyLocationChange(Location location) {
        //从location对象中获取经纬度信息，地址描述信息，建议拿到位置之后调用逆地理编码接口获取（获取地址描述数据章节有介绍）
        LogUtils.w("onMyLocationChange");
     /*   double latitude = location.getLatitude();
        double longitude = location.getLongitude();

        LatLng latLng = new LatLng(latitude, longitude);
        markerOption.position(latLng);
        aMap.addMarker(markerOption);*/
    }

    @OnClick(R.id.righTopTv)
    public void onViewClicked() {

        Intent data = new Intent();
        data.putExtra("latlng", resultLatlng);
        data.putExtra("addressDesc", leftbottomTv.getText());
        setResult(Activity.RESULT_OK, data);
        finish();
    }
}
